package com.bc.util.sql;
import org.apache.commons.dbcp.BasicDataSource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
public class SqlUtils {
public static void appendCriteriaToSqlBuffer(ArrayList criteria, StringBuffer sql) {
if (criteria.size() > 0) {
sql.append(" WHERE ");
for (int i = 0; i < criteria.size(); i++) {
if (i > 0) {
sql.append(" AND ");
}
sql.append(criteria.get(i));
sql.append('\n');
}
}
}
// @todo 2 tb/tb add test and javadoc
public static void appendWildcardAlternatives(String columnName, String columnValuePattern, String parameterName,
Map parameterMap, List criteriaList) {
appendWildcardAlternatives(columnName, columnValuePattern, parameterName, parameterMap, criteriaList, true);
}
// @todo 2 tb/tb add test and javadoc
public static void appendWildcardAlternatives(String columnName, String columnValuePattern, String parameterName,
Map parameterMap, List criteriaList, boolean underscoreSensitive) {
final StringTokenizer st = new StringTokenizer(columnValuePattern, ";");
final StringBuffer exprBuffer = new StringBuffer(CAPACITY);
int index = 0;
while (st.hasMoreTokens()) {
String token = st.nextToken().trim();
if (token.length() > 0) {
token = token.replace('*', '%');
if (underscoreSensitive) {
// following two lines are to replace "_" with "\_"
// Undersore is in SQL a wildcard for one character
token = token.replaceAll("_", "*_");
token = token.replace('*', '\\');
}
if (index > 0) {
parameterName += "_" + (index + 1);
exprBuffer.append(" OR ");
}
exprBuffer.append(columnName);
if (token.indexOf("%") != -1 || token.indexOf("\\_") != -1) {
exprBuffer.append(" LIKE ${");
} else {
exprBuffer.append(" = ${");
}
exprBuffer.append(parameterName);
exprBuffer.append('}');
index++;
parameterMap.put(parameterName, token);
}
}
if (index > 1) {
exprBuffer.insert(0, '(');
exprBuffer.append(')');
}
final String expression = exprBuffer.toString();
if (expression.length() > 0) {
criteriaList.add(expression);
}
}
public static BasicDataSource createDatasource(DataSourceConfig dataSourceConfig) {
final BasicDataSource result = new BasicDataSource();
result.setDriverClassName(dataSourceConfig.getDriver());
result.setUrl(dataSourceConfig.getUrl());
result.setUsername(dataSourceConfig.getUsername());
result.setPassword(dataSourceConfig.getPassword());
return result;
}
///////////////////////////////////////////////////////////////////////////
/////// END OF PUBLIC
///////////////////////////////////////////////////////////////////////////
private static final int CAPACITY = 256;
}